/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.davidhodin.easymoney.ihm;

import com.davidhodin.easymoney.data.*;
import java.text.SimpleDateFormat;
import java.util.List;
import javax.persistence.Persistence;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author David
 */
public class Accueil extends javax.swing.JFrame {

    // gestionnaires
    private CategorieJpaController controleurCat;
    private CompteJpaController controleurCpt;
    private MouvementJpaController controleurMvt;
    private Compte compteCourant;
    private Categorie catActuelle;
    private List<Mouvement> listMvt;
    private MonModele table;
    private Mouvement mvtSelectionne;

    /**
     * Creates new form Accueil
     */
    public Accueil() {
        initComponents();
        // Initilise les controleurs
        controleurCat = new CategorieJpaController(Persistence.createEntityManagerFactory("com.davidhodin_EasyMoney_jar_1.0-SNAPSHOTPU"));
        controleurCpt = new CompteJpaController(Persistence.createEntityManagerFactory("com.davidhodin_EasyMoney_jar_1.0-SNAPSHOTPU"));
        controleurMvt = new MouvementJpaController(Persistence.createEntityManagerFactory("com.davidhodin_EasyMoney_jar_1.0-SNAPSHOTPU"));

        // Initialise les données en affichage
        jComboBoxCat.addItem("Toutes");
        for (Categorie nomCat : controleurCat.findCategorieEntities()) {
            jComboBoxCat.addItem(nomCat.getNomCategorie());
        }
        catActuelle = controleurCat.getCategorieByNom((String) jComboBoxCat.getItemAt(0));
        for (Compte cpte : controleurCpt.findCompteEntities()) {
            jComboBoxComptes.addItem(cpte.getNomCompte());
            jButtonAjouterMvt.setEnabled(true);
        }
        compteCourant = controleurCpt.getCompteByNom((String) jComboBoxComptes.getItemAt(0));
        actualiseMontantCpte();
        actualiseAffichageTable();
    }

    private void actualiseMontantCpte() {
        // Met à jour la valeur affiché du compte et recharge le compte courant
        compteCourant = controleurCpt.findCompte((String) jComboBoxComptes.getSelectedItem());
        if (compteCourant != null) {
            jTextFieldMontantCpte.setText(compteCourant.getMontantCompte().toString() + " €");
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanelGestion = new javax.swing.JPanel();
        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        jComboBoxCat = new javax.swing.JComboBox();
        jButtonAjouterCat = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jComboBoxComptes = new javax.swing.JComboBox();
        jButtonAjouterCpt = new javax.swing.JButton();
        filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(50, 0), new java.awt.Dimension(50, 0), new java.awt.Dimension(50, 32767));
        jLabel3 = new javax.swing.JLabel();
        jTextFieldMontantCpte = new javax.swing.JTextField();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTable1 = new javax.swing.JTable();
        jPanel2 = new javax.swing.JPanel();
        jButtonAjouterMvt = new javax.swing.JButton();
        jButtonModifierMvt = new javax.swing.JButton();
        jButtonSupprimerMvt = new javax.swing.JButton();
        jPanelAnalyse = new javax.swing.JPanel();
        jLabel5 = new javax.swing.JLabel();
        jPanelaPropos = new javax.swing.JPanel();
        jPanelTop = new javax.swing.JPanel();
        jLabelTitre = new javax.swing.JLabel();
        jPanelCentre = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Gestion de comptes personnels");
        setBounds(new java.awt.Rectangle(100, 100, 800, 600));
        setLocationByPlatform(true);

        jTabbedPane1.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));

        jPanelGestion.setBorder(javax.swing.BorderFactory.createEmptyBorder(10, 10, 10, 10));
        jPanelGestion.setLayout(new java.awt.BorderLayout(10, 10));

        jPanel1.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        jLabel1.setText("Catégorie :");
        jPanel1.add(jLabel1);

        jComboBoxCat.setPreferredSize(new java.awt.Dimension(100, 25));
        jComboBoxCat.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBoxCatActionPerformed(evt);
            }
        });
        jPanel1.add(jComboBoxCat);

        jButtonAjouterCat.setText("+");
        jButtonAjouterCat.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAjouterCatActionPerformed(evt);
            }
        });
        jPanel1.add(jButtonAjouterCat);

        jLabel2.setText("Comptes :");
        jPanel1.add(jLabel2);

        jComboBoxComptes.setPreferredSize(new java.awt.Dimension(100, 25));
        jComboBoxComptes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboBoxComptesActionPerformed(evt);
            }
        });
        jPanel1.add(jComboBoxComptes);

        jButtonAjouterCpt.setText("+");
        jButtonAjouterCpt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAjouterCptActionPerformed(evt);
            }
        });
        jPanel1.add(jButtonAjouterCpt);
        jPanel1.add(filler1);

        jLabel3.setText("Montant :");
        jPanel1.add(jLabel3);

        jTextFieldMontantCpte.setEditable(false);
        jTextFieldMontantCpte.setHorizontalAlignment(javax.swing.JTextField.CENTER);
        jTextFieldMontantCpte.setMinimumSize(new java.awt.Dimension(6, 23));
        jTextFieldMontantCpte.setPreferredSize(new java.awt.Dimension(100, 25));
        jPanel1.add(jTextFieldMontantCpte);

        jPanelGestion.add(jPanel1, java.awt.BorderLayout.NORTH);

        jTable1.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null},
                {null, null, null, null}
            },
            new String [] {
                "Title 1", "Title 2", "Title 3", "Title 4"
            }
        ));
        jTable1.setFillsViewportHeight(true);
        jTable1.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                jTable1MouseClicked(evt);
            }
        });
        jScrollPane1.setViewportView(jTable1);

        jPanelGestion.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel2.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        jButtonAjouterMvt.setText("Ajouter un mouvement");
        jButtonAjouterMvt.setEnabled(false);
        jButtonAjouterMvt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonAjouterMvtActionPerformed(evt);
            }
        });
        jPanel2.add(jButtonAjouterMvt);

        jButtonModifierMvt.setText("Modifier le mouvement");
        jButtonModifierMvt.setEnabled(false);
        jButtonModifierMvt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonModifierMvtActionPerformed(evt);
            }
        });
        jPanel2.add(jButtonModifierMvt);

        jButtonSupprimerMvt.setText("Supprimer le mouvement");
        jButtonSupprimerMvt.setEnabled(false);
        jButtonSupprimerMvt.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButtonSupprimerMvtActionPerformed(evt);
            }
        });
        jPanel2.add(jButtonSupprimerMvt);

        jPanelGestion.add(jPanel2, java.awt.BorderLayout.SOUTH);

        jTabbedPane1.addTab("Gestion des mouvements", jPanelGestion);

        jPanelAnalyse.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        jLabel5.setText("En cours de développement...");
        jPanelAnalyse.add(jLabel5);

        jTabbedPane1.addTab("Analyse", jPanelAnalyse);

        jPanelaPropos.setLayout(new java.awt.BorderLayout());

        jPanelTop.setPreferredSize(new java.awt.Dimension(586, 60));

        jLabelTitre.setFont(new java.awt.Font("Tempus Sans ITC", 1, 24)); // NOI18N
        jLabelTitre.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabelTitre.setText("Outil de gestion de comptes personnels");
        jLabelTitre.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED));

        javax.swing.GroupLayout jPanelTopLayout = new javax.swing.GroupLayout(jPanelTop);
        jPanelTop.setLayout(jPanelTopLayout);
        jPanelTopLayout.setHorizontalGroup(
            jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 714, Short.MAX_VALUE)
            .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanelTopLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabelTitre, javax.swing.GroupLayout.DEFAULT_SIZE, 694, Short.MAX_VALUE)
                    .addContainerGap()))
        );
        jPanelTopLayout.setVerticalGroup(
            jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 60, Short.MAX_VALUE)
            .addGroup(jPanelTopLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(jPanelTopLayout.createSequentialGroup()
                    .addContainerGap()
                    .addComponent(jLabelTitre, javax.swing.GroupLayout.DEFAULT_SIZE, 38, Short.MAX_VALUE)
                    .addContainerGap()))
        );

        jPanelaPropos.add(jPanelTop, java.awt.BorderLayout.NORTH);

        jPanelCentre.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 20, 20));

        jLabel4.setFont(new java.awt.Font("Tempus Sans ITC", 0, 14)); // NOI18N
        jLabel4.setText("<html> EasyMoney est une version \"light\" d'un gestionnaire de comptes personnels.<br/> \nCet outil a été développé en JAVA et fonctionne sur tout type de système d'exploitation.<br/> \nLa persistence des données est réalisée via JPA et la base de donnée intégrée DERBY. <br/>\nIl ne nécessite que l'installation de la machine virtuelle JAVA.<br/> <br/> \nConcepteur/Développeur : David HODIN<br/> \nIdée originale de Christine HODIN \n<br/>\n<br/>\n<strong>\nwww.david-hodin.com\n</strong>\n<br/><br/>\nEvolutions en cours de développement :\n<br/>\n- Mise en oeuvre des catégories dépendantes<br/>\n- Gestion des mouvements inter-comptes<br/>\n- Gestion des mouvements pré-programmés<br/>\n- Gestion des statistiques<br/>\n- ...\n</html>");
        jPanelCentre.add(jLabel4);

        jPanelaPropos.add(jPanelCentre, java.awt.BorderLayout.CENTER);

        jTabbedPane1.addTab("A propos...", jPanelaPropos);

        getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void jButtonAjouterCatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAjouterCatActionPerformed
        // Récupère le nom de la catégorie à ajouter
        JOptionPane recupNom = new JOptionPane();
        String showInputDialog = recupNom.showInputDialog(null, "Nom de la catégorie à ajouter : ", "Catégorie", JOptionPane.INFORMATION_MESSAGE);
        // Vérifie si celle-ci existe déjà dans la liste (si la valeur retournée n'est pas vide)
        if (!(showInputDialog == null)) {
            if (!showInputDialog.isEmpty()) {
                for (int i = 0; i < jComboBoxCat.getItemCount(); i++) {
                    if (jComboBoxCat.getItemAt(i).toString().toUpperCase().equals(showInputDialog.toUpperCase())) {
                        recupNom.showMessageDialog(this, "La catégorie existe déjà", "Erreur", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                }
                try {
                    controleurCat.create(new Categorie(showInputDialog));
                    jComboBoxCat.addItem(showInputDialog);
                    jComboBoxCat.setSelectedIndex(jComboBoxCat.getItemCount() - 1);
                } catch (Exception e) {
                    System.err.println("Erreur de création de la catégorie... Détail : " + e.toString());
                }
            }
        }
    }//GEN-LAST:event_jButtonAjouterCatActionPerformed

    private void jButtonAjouterCptActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAjouterCptActionPerformed
        // Récupère et ajoute le compte
        JOptionPane recupNom = new JOptionPane();
        String showInputDialog = recupNom.showInputDialog(null, "Nom du compte à ajouter : ", "Compte", JOptionPane.INFORMATION_MESSAGE);
        // Vérifie si celle-ci existe déjà dans la liste (si la valeur retournée n'est pas vide)
        if (!(showInputDialog == null)) {
            if (!showInputDialog.isEmpty()) {
                for (int i = 0; i < jComboBoxComptes.getItemCount(); i++) {
                    if (jComboBoxComptes.getItemAt(i).toString().toUpperCase().equals(showInputDialog.toUpperCase())) {
                        recupNom.showMessageDialog(this, "Le compte existe déjà", "Erreur", JOptionPane.ERROR_MESSAGE);
                        return;
                    }
                }
                try {
                    controleurCpt.create(new Compte(showInputDialog, 0f));
                    jComboBoxComptes.addItem(showInputDialog);
                    jComboBoxComptes.setSelectedIndex(jComboBoxComptes.getItemCount() - 1);
                } catch (Exception e) {
                    System.err.println("Erreur de création de compte... Détail : " + e.toString());
                    return;
                }
            }
            jButtonAjouterMvt.setEnabled(true);
        }

    }//GEN-LAST:event_jButtonAjouterCptActionPerformed

    private void jComboBoxComptesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxComptesActionPerformed
        // Actualise la liste des Mouvements et le montant du compte
        compteCourant = controleurCpt.getCompteByNom((String) jComboBoxComptes.getSelectedItem());
        actualiseMontantCpte();
        actualiseAffichageTable();
    }//GEN-LAST:event_jComboBoxComptesActionPerformed

    private void jButtonAjouterMvtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonAjouterMvtActionPerformed
        // Ouvrir la fenêtre de gestion des mouvements en écriture
        if (compteCourant != null) {
            IhmMouvement mvt = new IhmMouvement(this, true);
            mvt.setNomCompte(compteCourant.getNomCompte(), controleurCpt.findCompteEntities());
            if (catActuelle != null) {
                mvt.setNomCategorie(catActuelle.getNomCategorie(), controleurCat.findCategorieEntities());
            } else {
                mvt.setNomCategorie("", controleurCat.findCategorieEntities());
            }
            mvt.setControleurMvt(controleurMvt);
            mvt.setControleurCpt(controleurCpt);
            mvt.setVisible(true);
            // met à jour l'affichage
            actualiseMontantCpte();
            actualiseAffichageTable();
        }
    }//GEN-LAST:event_jButtonAjouterMvtActionPerformed

    private void jComboBoxCatActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxCatActionPerformed
        // Actualise la liste des Mouvements et le montant du compte
        if (jComboBoxCat.getSelectedIndex() == 0) {
            catActuelle = null;
        } else {
            catActuelle = controleurCat.getCategorieByNom((String) jComboBoxCat.getSelectedItem());
        }
        actualiseAffichageTable();
    }//GEN-LAST:event_jComboBoxCatActionPerformed

    private void jTable1MouseClicked(java.awt.event.MouseEvent evt) {//GEN-FIRST:event_jTable1MouseClicked
        // Récupère le mouvement sélectionné et active le boutton
        System.out.println("Sélection de l'enregistrement : " + jTable1.getModel().getValueAt(jTable1.getSelectedRow(), 0));
        mvtSelectionne = controleurMvt.findMouvement((Long) jTable1.getModel().getValueAt(jTable1.getSelectedRow(), 0));
        jButtonModifierMvt.setEnabled(true);
        jButtonSupprimerMvt.setEnabled(true);
    }//GEN-LAST:event_jTable1MouseClicked

    private void jButtonModifierMvtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonModifierMvtActionPerformed
        // Ouvre la fiche en modification
        IhmMouvement mvt = new IhmMouvement(this, true);
        mvt.setMvt(mvtSelectionne);
        mvt.setNomCategorie(mvtSelectionne.getCategorie(), controleurCat.findCategorieEntities());
        mvt.setNomCompte(mvtSelectionne.getCompte(), controleurCpt.findCompteEntities());
        mvt.setControleurMvt(controleurMvt);
        mvt.setControleurCpt(controleurCpt);
        mvt.setVisible(true);
        // met à jour l'affichage
        actualiseMontantCpte();
        actualiseAffichageTable();
    }//GEN-LAST:event_jButtonModifierMvtActionPerformed

    private void jButtonSupprimerMvtActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonSupprimerMvtActionPerformed
        // TODO add your handling code here: Supprimer le mouvement et recalculer le total

        // mettre à jour le montant du compte
        Compte aMettreAjour = controleurCpt.findCompte(mvtSelectionne.getCompte());
        try {
            // Supprime les anciennes données
            if (mvtSelectionne.getCredit() == 1) {
                aMettreAjour.setMontantCompte(aMettreAjour.getMontantCompte() - mvtSelectionne.getMontantOp());
            } else {
                aMettreAjour.setMontantCompte(aMettreAjour.getMontantCompte() + mvtSelectionne.getMontantOp());
            }
            controleurCpt.edit(aMettreAjour);
        } catch (Exception e) {
            JOptionPane opp = new JOptionPane();
            opp.showMessageDialog(this, "Erreur de mise à jour du montant de compte : " + e.toString(), "Erreur", JOptionPane.ERROR_MESSAGE);
            return;
        }

        // mettre à jour les données (suppression du mouvement)
        try {
            controleurMvt.destroy(mvtSelectionne.getId());
        } catch (Exception e) {
            JOptionPane opp = new JOptionPane();
            opp.showMessageDialog(this, "Erreur de suppression du mouvement : " + e.toString(), "Erreur", JOptionPane.ERROR_MESSAGE);
            return;
        }
        // met à jour l'affichage
        actualiseMontantCpte();
        actualiseAffichageTable();
    }//GEN-LAST:event_jButtonSupprimerMvtActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /*
         * Set the Nimbus look and feel
         */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /*
         * If Nimbus (introduced in Java SE 6) is not available, stay with the
         * default look and feel. For details see
         * http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(Accueil.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /*
         * Create and display the form
         */
        java.awt.EventQueue.invokeLater(new Runnable() {

            @Override
            public void run() {
                new Accueil().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.Box.Filler filler1;
    private javax.swing.JButton jButtonAjouterCat;
    private javax.swing.JButton jButtonAjouterCpt;
    private javax.swing.JButton jButtonAjouterMvt;
    private javax.swing.JButton jButtonModifierMvt;
    private javax.swing.JButton jButtonSupprimerMvt;
    private javax.swing.JComboBox jComboBoxCat;
    private javax.swing.JComboBox jComboBoxComptes;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabelTitre;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    private javax.swing.JPanel jPanelAnalyse;
    private javax.swing.JPanel jPanelCentre;
    private javax.swing.JPanel jPanelGestion;
    private javax.swing.JPanel jPanelTop;
    private javax.swing.JPanel jPanelaPropos;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTable jTable1;
    private javax.swing.JTextField jTextFieldMontantCpte;
    // End of variables declaration//GEN-END:variables

    private void actualiseAffichageTable() {
        // Récupère les données
        //listMvt = controleurMvt.findMouvementEntities();
        // TODO: Finaliser et tester la fonction
        if (compteCourant != null) {
            if (catActuelle != null) {
                listMvt = controleurMvt.findMouvementEntities(compteCourant.getNomCompte(), catActuelle.getNomCategorie());
            } else {
                listMvt = controleurMvt.findMouvementEntities(compteCourant.getNomCompte(), null);
            }
        }

        // Défini les données à afficher
        Object[][] data;
        if (listMvt != null) {
            SimpleDateFormat formatDate = new SimpleDateFormat("dd/MM/yyyy");
            data = new Object[listMvt.size()][6];
            int i = 0;
            for (Mouvement cpt : listMvt) {
                data[i][0] = cpt.getId();
                data[i][1] = formatDate.format(cpt.getDateOperation());
                data[i][2] = cpt.getDetailOperation();
                data[i][3] = cpt.getCategorie();
                if (cpt.getCredit() != 1) {
                    data[i][4] = "- " + cpt.getMontantOp() + " €";
                    data[i][5] = "";
                } else {
                    data[i][4] = "";
                    data[i][5] = "+ " + cpt.getMontantOp() + " €";
                }

                i++;
            }
        } else {
            data = new Object[0][6];
        }

        // Défini les intitulés de colonnes
        String[] title = {"Id", "Date opération", "Détails", "Catégorie", "Débit", "Crédit"};
        table = new MonModele(data, title);

        // Met à jour l'affichage
        jTable1.setModel(table);
        jTable1.repaint();
        jButtonModifierMvt.setEnabled(false);
        jButtonSupprimerMvt.setEnabled(false);
    }

    class MonModele extends DefaultTableModel {

        public MonModele(Object[][] data, String[] title) {
            super(data, title);
        }

        /**
         * Retourne vrai si la cellule est éditable : celle-ci sera donc
         * éditable
         *
         * @return boolean
         */
        @Override
        public boolean isCellEditable(int row, int col) {
            return false;
        }
    }
}
